﻿/*
 Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
 */
(function () {
    CKEDITOR.dialog.add("link", function (g) {
        var n = CKEDITOR.plugins.link, p = function () {
                var a = this.getDialog(), b = a.getContentElement("target", "popupFeatures"), a = a.getContentElement("target", "linkTargetName"), m = this.getValue();
                if (b && a)switch (b = b.getElement(), b.hide(), a.setValue(""), m) {
                    case "frame":
                        a.setLabel(g.lang.link.targetFrameName);
                        a.getElement().show();
                        break;
                    case "popup":
                        b.show();
                        a.setLabel(g.lang.link.targetPopupName);
                        a.getElement().show();
                        break;
                    default:
                        a.setValue(m), a.getElement().hide()
                }
            },
            f = function (a) {
                a.target && this.setValue(a.target[this.id] || "")
            }, h = function (a) {
                a.advanced && this.setValue(a.advanced[this.id] || "")
            }, k = function (a) {
                a.target || (a.target = {});
                a.target[this.id] = this.getValue() || ""
            }, l = function (a) {
                a.advanced || (a.advanced = {});
                a.advanced[this.id] = this.getValue() || ""
            }, c = g.lang.common, b = g.lang.link, d;
        return {
            title: b.title, minWidth: 350, minHeight: 230, contents: [{
                id: "info", label: b.info, title: b.info, elements: [{
                    id: "linkType", type: "select", label: b.type, "default": "url", items: [[b.toUrl, "url"],
                        [b.toAnchor, "anchor"], [b.toEmail, "email"]], onChange: function () {
                        var a = this.getDialog(), b = ["urlOptions", "anchorOptions", "emailOptions"], m = this.getValue(), e = a.definition.getContents("upload"), e = e && e.hidden;
                        "url" == m ? (g.config.linkShowTargetTab && a.showPage("target"), e || a.showPage("upload")) : (a.hidePage("target"), e || a.hidePage("upload"));
                        for (e = 0; e < b.length; e++) {
                            var c = a.getContentElement("info", b[e]);
                            c && (c = c.getElement().getParent().getParent(), b[e] == m + "Options" ? c.show() : c.hide())
                        }
                        a.layout()
                    }, setup: function (a) {
                        this.setValue(a.type ||
                        "url")
                    }, commit: function (a) {
                        a.type = this.getValue()
                    }
                }, {
                    type: "vbox", id: "urlOptions", children: [{
                        type: "hbox",
                        widths: ["25%", "75%"],
                        children: [{
                            id: "protocol",
                            type: "select",
                            label: c.protocol,
                            "default": "http://",
                            items: [["http://‎", "http://"], ["https://‎", "https://"], ["ftp://‎", "ftp://"], ["news://‎", "news://"], [b.other, ""]],
                            setup: function (a) {
                                a.url && this.setValue(a.url.protocol || "")
                            },
                            commit: function (a) {
                                a.url || (a.url = {});
                                a.url.protocol = this.getValue()
                            }
                        }, {
                            type: "text", id: "url", label: c.url, required: !0, onLoad: function () {
                                this.allowOnChange = !0
                            }, onKeyUp: function () {
                                this.allowOnChange = !1;
                                var a = this.getDialog().getContentElement("info", "protocol"), b = this.getValue(), m = /^((javascript:)|[#\/\.\?])/i, c = /^(http|https|ftp|news):\/\/(?=.)/i.exec(b);
                                c ? (this.setValue(b.substr(c[0].length)), a.setValue(c[0].toLowerCase())) : m.test(b) && a.setValue("");
                                this.allowOnChange = !0
                            }, onChange: function () {
                                if (this.allowOnChange)this.onKeyUp()
                            }, validate: function () {
                                var a = this.getDialog();
                                return a.getContentElement("info", "linkType") && "url" != a.getValueOf("info", "linkType") ?
                                    !0 : !g.config.linkJavaScriptLinksAllowed && /javascript\:/.test(this.getValue()) ? (alert(c.invalidValue), !1) : this.getDialog().fakeObj ? !0 : CKEDITOR.dialog.validate.notEmpty(b.noUrl).apply(this)
                            }, setup: function (a) {
                                this.allowOnChange = !1;
                                a.url && this.setValue(a.url.url);
                                this.allowOnChange = !0
                            }, commit: function (a) {
                                this.onChange();
                                a.url || (a.url = {});
                                a.url.url = this.getValue();
                                this.allowOnChange = !1
                            }
                        }],
                        setup: function () {
                            this.getDialog().getContentElement("info", "linkType") || this.getElement().show()
                        }
                    }, {
                        type: "button",
                        id: "browse", hidden: "true", filebrowser: "info:url", label: c.browseServer
                    }]
                }, {
                    type: "vbox", id: "anchorOptions", width: 260, align: "center", padding: 0, children: [{
                        type: "fieldset", id: "selectAnchorText", label: b.selectAnchor, setup: function () {
                            d = n.getEditorAnchors(g);
                            this.getElement()[d && d.length ? "show" : "hide"]()
                        }, children: [{
                            type: "hbox", id: "selectAnchor", children: [{
                                type: "select",
                                id: "anchorName",
                                "default": "",
                                label: b.anchorName,
                                style: "width: 100%;",
                                items: [[""]],
                                setup: function (a) {
                                    this.clear();
                                    this.add("");
                                    if (d)for (var b =
                                        0; b < d.length; b++)d[b].name && this.add(d[b].name);
                                    a.anchor && this.setValue(a.anchor.name);
                                    (a = this.getDialog().getContentElement("info", "linkType")) && "email" == a.getValue() && this.focus()
                                },
                                commit: function (a) {
                                    a.anchor || (a.anchor = {});
                                    a.anchor.name = this.getValue()
                                }
                            }, {
                                type: "select",
                                id: "anchorId",
                                "default": "",
                                label: b.anchorId,
                                style: "width: 100%;",
                                items: [[""]],
                                setup: function (a) {
                                    this.clear();
                                    this.add("");
                                    if (d)for (var b = 0; b < d.length; b++)d[b].id && this.add(d[b].id);
                                    a.anchor && this.setValue(a.anchor.id)
                                },
                                commit: function (a) {
                                    a.anchor ||
                                    (a.anchor = {});
                                    a.anchor.id = this.getValue()
                                }
                            }], setup: function () {
                                this.getElement()[d && d.length ? "show" : "hide"]()
                            }
                        }]
                    }, {
                        type: "html",
                        id: "noAnchors",
                        style: "text-align: center;",
                        html: '\x3cdiv role\x3d"note" tabIndex\x3d"-1"\x3e' + CKEDITOR.tools.htmlEncode(b.noAnchors) + "\x3c/div\x3e",
                        focus: !0,
                        setup: function () {
                            this.getElement()[d && d.length ? "hide" : "show"]()
                        }
                    }], setup: function () {
                        this.getDialog().getContentElement("info", "linkType") || this.getElement().hide()
                    }
                }, {
                    type: "vbox", id: "emailOptions", padding: 1, children: [{
                        type: "text",
                        id: "emailAddress", label: b.emailAddress, required: !0, validate: function () {
                            var a = this.getDialog();
                            return a.getContentElement("info", "linkType") && "email" == a.getValueOf("info", "linkType") ? CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this) : !0
                        }, setup: function (a) {
                            a.email && this.setValue(a.email.address);
                            (a = this.getDialog().getContentElement("info", "linkType")) && "email" == a.getValue() && this.select()
                        }, commit: function (a) {
                            a.email || (a.email = {});
                            a.email.address = this.getValue()
                        }
                    }, {
                        type: "text", id: "emailSubject",
                        label: b.emailSubject, setup: function (a) {
                            a.email && this.setValue(a.email.subject)
                        }, commit: function (a) {
                            a.email || (a.email = {});
                            a.email.subject = this.getValue()
                        }
                    }, {
                        type: "textarea",
                        id: "emailBody",
                        label: b.emailBody,
                        rows: 3,
                        "default": "",
                        setup: function (a) {
                            a.email && this.setValue(a.email.body)
                        },
                        commit: function (a) {
                            a.email || (a.email = {});
                            a.email.body = this.getValue()
                        }
                    }], setup: function () {
                        this.getDialog().getContentElement("info", "linkType") || this.getElement().hide()
                    }
                }]
            }, {
                id: "target", requiredContent: "a[target]", label: b.target,
                title: b.target, elements: [{
                    type: "hbox",
                    widths: ["50%", "50%"],
                    children: [{
                        type: "select",
                        id: "linkTargetType",
                        label: c.target,
                        "default": "notSet",
                        style: "width : 100%;",
                        items: [[c.notSet, "notSet"], [b.targetFrame, "frame"], [b.targetPopup, "popup"], [c.targetNew, "_blank"], [c.targetTop, "_top"], [c.targetSelf, "_self"], [c.targetParent, "_parent"]],
                        onChange: p,
                        setup: function (a) {
                            a.target && this.setValue(a.target.type || "notSet");
                            p.call(this)
                        },
                        commit: function (a) {
                            a.target || (a.target = {});
                            a.target.type = this.getValue()
                        }
                    }, {
                        type: "text",
                        id: "linkTargetName", label: b.targetFrameName, "default": "", setup: function (a) {
                            a.target && this.setValue(a.target.name)
                        }, commit: function (a) {
                            a.target || (a.target = {});
                            a.target.name = this.getValue().replace(/([^\x00-\x7F]|\s)/gi, "")
                        }
                    }]
                }, {
                    type: "vbox", width: "100%", align: "center", padding: 2, id: "popupFeatures", children: [{
                        type: "fieldset", label: b.popupFeatures, children: [{
                            type: "hbox",
                            children: [{
                                type: "checkbox",
                                id: "resizable",
                                label: b.popupResizable,
                                setup: f,
                                commit: k
                            }, {
                                type: "checkbox", id: "status", label: b.popupStatusBar,
                                setup: f, commit: k
                            }]
                        }, {
                            type: "hbox",
                            children: [{
                                type: "checkbox",
                                id: "location",
                                label: b.popupLocationBar,
                                setup: f,
                                commit: k
                            }, {type: "checkbox", id: "toolbar", label: b.popupToolbar, setup: f, commit: k}]
                        }, {
                            type: "hbox",
                            children: [{
                                type: "checkbox",
                                id: "menubar",
                                label: b.popupMenuBar,
                                setup: f,
                                commit: k
                            }, {type: "checkbox", id: "fullscreen", label: b.popupFullScreen, setup: f, commit: k}]
                        }, {
                            type: "hbox",
                            children: [{
                                type: "checkbox",
                                id: "scrollbars",
                                label: b.popupScrollBars,
                                setup: f,
                                commit: k
                            }, {
                                type: "checkbox", id: "dependent", label: b.popupDependent,
                                setup: f, commit: k
                            }]
                        }, {
                            type: "hbox",
                            children: [{
                                type: "text",
                                widths: ["50%", "50%"],
                                labelLayout: "horizontal",
                                label: c.width,
                                id: "width",
                                setup: f,
                                commit: k
                            }, {
                                type: "text",
                                labelLayout: "horizontal",
                                widths: ["50%", "50%"],
                                label: b.popupLeft,
                                id: "left",
                                setup: f,
                                commit: k
                            }]
                        }, {
                            type: "hbox",
                            children: [{
                                type: "text",
                                labelLayout: "horizontal",
                                widths: ["50%", "50%"],
                                label: c.height,
                                id: "height",
                                setup: f,
                                commit: k
                            }, {
                                type: "text",
                                labelLayout: "horizontal",
                                label: b.popupTop,
                                widths: ["50%", "50%"],
                                id: "top",
                                setup: f,
                                commit: k
                            }]
                        }]
                    }]
                }]
            }, {
                id: "upload",
                label: b.upload,
                title: b.upload,
                hidden: !0,
                filebrowser: "uploadButton",
                elements: [{
                    type: "file",
                    id: "upload",
                    label: c.upload,
                    style: "height:40px",
                    size: 29
                }, {
                    type: "fileButton",
                    id: "uploadButton",
                    label: c.uploadSubmit,
                    filebrowser: "info:url",
                    "for": ["upload", "upload"]
                }]
            }, {
                id: "advanced", label: b.advanced, title: b.advanced, elements: [{
                    type: "vbox", padding: 1, children: [{
                        type: "hbox",
                        widths: ["45%", "35%", "20%"],
                        children: [{
                            type: "text",
                            id: "advId",
                            requiredContent: "a[id]",
                            label: b.id,
                            setup: h,
                            commit: l
                        }, {
                            type: "select",
                            id: "advLangDir",
                            requiredContent: "a[dir]",
                            label: b.langDir,
                            "default": "",
                            style: "width:110px",
                            items: [[c.notSet, ""], [b.langDirLTR, "ltr"], [b.langDirRTL, "rtl"]],
                            setup: h,
                            commit: l
                        }, {
                            type: "text",
                            id: "advAccessKey",
                            requiredContent: "a[accesskey]",
                            width: "80px",
                            label: b.acccessKey,
                            maxLength: 1,
                            setup: h,
                            commit: l
                        }]
                    }, {
                        type: "hbox",
                        widths: ["45%", "35%", "20%"],
                        children: [{
                            type: "text",
                            label: b.name,
                            id: "advName",
                            requiredContent: "a[name]",
                            setup: h,
                            commit: l
                        }, {
                            type: "text",
                            label: b.langCode,
                            id: "advLangCode",
                            requiredContent: "a[lang]",
                            width: "110px",
                            "default": "",
                            setup: h,
                            commit: l
                        }, {
                            type: "text",
                            label: b.tabIndex,
                            id: "advTabIndex",
                            requiredContent: "a[tabindex]",
                            width: "80px",
                            maxLength: 5,
                            setup: h,
                            commit: l
                        }]
                    }]
                }, {
                    type: "vbox",
                    padding: 1,
                    children: [{
                        type: "hbox",
                        widths: ["45%", "55%"],
                        children: [{
                            type: "text",
                            label: b.advisoryTitle,
                            requiredContent: "a[title]",
                            "default": "",
                            id: "advTitle",
                            setup: h,
                            commit: l
                        }, {
                            type: "text",
                            label: b.advisoryContentType,
                            requiredContent: "a[type]",
                            "default": "",
                            id: "advContentType",
                            setup: h,
                            commit: l
                        }]
                    }, {
                        type: "hbox", widths: ["45%", "55%"], children: [{
                            type: "text",
                            label: b.cssClasses,
                            requiredContent: "a(cke-xyz)",
                            "default": "",
                            id: "advCSSClasses",
                            setup: h,
                            commit: l
                        }, {
                            type: "text",
                            label: b.charset,
                            requiredContent: "a[charset]",
                            "default": "",
                            id: "advCharset",
                            setup: h,
                            commit: l
                        }]
                    }, {
                        type: "hbox",
                        widths: ["45%", "55%"],
                        children: [{
                            type: "text",
                            label: b.rel,
                            requiredContent: "a[rel]",
                            "default": "",
                            id: "advRel",
                            setup: h,
                            commit: l
                        }, {
                            type: "text",
                            label: b.styles,
                            requiredContent: "a{cke-xyz}",
                            "default": "",
                            id: "advStyles",
                            validate: CKEDITOR.dialog.validate.inlineStyle(g.lang.common.invalidInlineStyle),
                            setup: h,
                            commit: l
                        }]
                    }]
                }]
            }], onShow: function () {
                var a = this.getParentEditor(), b = a.getSelection(), c = null;
                (c = n.getSelectedLink(a)) && c.hasAttribute("href") ? b.getSelectedElement() || b.selectElement(c) : c = null;
                a = n.parseLinkAttributes(a, c);
                this._.selectedElement = c;
                this.setupContent(a)
            }, onOk: function () {
                var a = {};
                this.commitContent(a);
                var b = g.getSelection(), c = n.getLinkAttributes(g, a);
                if (this._.selectedElement) {
                    var e = this._.selectedElement, d = e.data("cke-saved-href"), f = e.getHtml();
                    e.setAttributes(c.set);
                    e.removeAttributes(c.removed);
                    if (d == f || "email" == a.type && -1 != f.indexOf("@"))e.setHtml("email" == a.type ? a.email.address : c.set["data-cke-saved-href"]), b.selectElement(e);
                    delete this._.selectedElement
                } else b = b.getRanges()[0], b.collapsed && (a = new CKEDITOR.dom.text("email" == a.type ? a.email.address : c.set["data-cke-saved-href"], g.document), b.insertNode(a), b.selectNodeContents(a)), c = new CKEDITOR.style({
                    element: "a",
                    attributes: c.set
                }), c.type = CKEDITOR.STYLE_INLINE, c.applyToRange(b, g), b.select()
            }, onLoad: function () {
                g.config.linkShowAdvancedTab ||
                this.hidePage("advanced");
                g.config.linkShowTargetTab || this.hidePage("target")
            }, onFocus: function () {
                var a = this.getContentElement("info", "linkType");
                a && "url" == a.getValue() && (a = this.getContentElement("info", "url"), a.select())
            }
        }
    })
})();